home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / conhlp03 / padp_src / ppgmenu.c < prev   
C/C++ Source or Header  |  1995-02-20  |  3KB  |  130 lines

  1. /*
  2.     ppgmenu.c
  3.     tab=8
  4.     1994/11/23 1994/11/27 1995/02/20
  5. */
  6.  
  7. #define PPGMENU
  8. #include "padpage.h"
  9.  
  10.  
  11. byte slmenu( const char *s[], int *k ){
  12.  
  13.     int i,sl;
  14.     byte r ;
  15.  
  16.     cprintf("\x1b[2;25H\x1b[33m%s\x1b[0K",s[0]);
  17.     sl = 1;
  18.     do{
  19.         for( i = 1 ; *s[i] != NULL ; i++ ){
  20.             cprintf("\x1b[2;%dH\x1b[32;%dm%-8s\x1b[m",
  21.                 48 + ( i - 1 ) * 8,
  22.                 ( sl == i ) ? 7 : 2 ,
  23.                 s[i] );
  24.         }
  25.         while( inkey() != NULL );
  26.         while( ( r = inkey() ) == NULL );
  27.         sl = ( r == LEFT ) ? sl - 1 : ( r == RIGHT ) ? sl + 1 : sl ;
  28.         sl = ( sl + i ) % i ;
  29.     } while( r == LEFT || r == RIGHT );
  30.     *k = sl;
  31.     return r;
  32. }
  33.  
  34.  
  35. #define SLMES 7
  36.  
  37. byte ppgmenu( uint *cline ){
  38.  
  39.     static const char *slmes[SLMES][5] = {
  40.          "すくろ~る しま~す"," あがる "," さがる ","","" ,
  41.          "ここに しるし つける","","","","" ,
  42.          ">-> だいぶ >-> "," しるし "," しっぽ "," あたま ","" ,
  43.          "こまんど を よぶ","","","","" ,
  44.          "さいなら~♪","","","","" ,
  45.          /*
  46.          "たぶ は どっちだ"," - 4 - "," - 8 - ","","" ,
  47.          */
  48.          "たぶ は 変更不可"," - 4 - "," - 8 - ","","" ,
  49.          "ぎょうかん は どう?"," あける "," つめる ","",""
  50.             };
  51.  
  52.     int i,k;
  53.     byte r;
  54.  
  55.     cputs("\x1b[2;5H\x1b[36;7m<< めにゅ~ >>->>-\x1b[m");
  56.  
  57.     r = ON;
  58.     for( i = 0 ; r != NULL ; i = ( i + SLMES ) % SLMES ){
  59.         switch ( r = slmenu( slmes[i], &k ) ) {
  60.         case QUIT: /* B */
  61.             k = -1;
  62.         case EXEC: /* A */
  63.             r = NULL;        /* メニューを抜ける */
  64.             break;
  65.         case UP: i--;
  66.             break;
  67.         case DOWN:
  68.             i++;
  69.             break;
  70.         default:
  71.             break;
  72.         }
  73.     }
  74.     r = OFF;
  75.     cputs( ESCSQU"2;1H" ESC_reset );
  76.     if( k < 0 ) i = SLMES;
  77.     switch ( i ) {
  78.     case 0: /* scroll */
  79.         cputs( ESCSQU"2;1H" ESC_el0 );
  80.         *cline = ppgscroll( ( k == 1 ) ? '+' :
  81.                 ( k == 2 ) ? '-' : NULL ,
  82.                 *cline ) ;
  83.         break;
  84.     case 1: /* mark */
  85.         mline = *cline ;
  86.         break;
  87.     case 2: /* jump */
  88.         *cline = ( k == 1 ) ? mline :
  89.             ( k == 2 ) ? MAXLINE :
  90.             ( k == 3 ) ? 1 : *cline ;
  91.         break;
  92.     case 3: /* call command */
  93.         cur( ON );
  94.         width( 25 );
  95.         system("");
  96.         cur( OFF );
  97.         width( 20 );
  98.         break;
  99.     case 4: /* quit */
  100.         r = ON; /* padpage quit */
  101.         break;
  102.     case 5: /* tab */
  103.         break;
  104.         tabs = ( k == 1 ) ? 4 : ( k == 2 ) ? 8 : tabs ;
  105.         if( tabs == 8 && k == 1 ){
  106.             tabs = 4;
  107.         }else
  108.         if( tabs == 4 && k == 2 ){
  109.             tabs = 8;
  110.         }else{
  111.             break;
  112.         }
  113.         dsppage( 1, setline( -1 ) ); /* 再初期化 */
  114.         dsppage( *cline, setline( *cline ) );
  115.         break;
  116.     case 6: /* width mode */
  117.         if( k == 2 ){
  118.             width( 25 );
  119.             maxdisp = 21;
  120.         }else if( k == 1 ){
  121.             width( 20 );
  122.             maxdisp = 16;
  123.         }
  124.         break;
  125.     default:
  126.         break;
  127.     }
  128.     return r;
  129. }
  130.